"""
客户跟进提醒任务
使用APScheduler实现定时任务
"""
from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.triggers.cron import CronTrigger
from flask import current_app
from app.utils.followup_reminder import send_followup_reminders
import atexit


def init_scheduler(app):
    """
    初始化定时任务调度器
    """
    scheduler = BackgroundScheduler()
    
    # 添加每日提醒任务 - 每天早上9点执行
    scheduler.add_job(
        func=lambda: run_reminder_task(app),
        trigger=CronTrigger(hour=9, minute=0),  # 每天早上9点
        id='daily_followup_reminder',
        name='每日跟进提醒',
        replace_existing=True
    )
    
    # 添加每小时检查任务 - 每小时执行一次，检查紧急提醒
    scheduler.add_job(
        func=lambda: run_urgent_reminder_task(app),
        trigger=CronTrigger(minute=0),  # 每小时整点
        id='hourly_urgent_reminder',
        name='紧急跟进提醒',
        replace_existing=True
    )
    
    # 启动调度器
    scheduler.start()
    
    # 注册应用退出时关闭调度器
    atexit.register(lambda: scheduler.shutdown())
    
    app.logger.info("跟进提醒定时任务已启动")
    return scheduler


def run_reminder_task(app):
    """
    执行每日提醒任务
    """
    with app.app_context():
        try:
            current_app.logger.info("开始执行每日跟进提醒任务")
            success, message = send_followup_reminders()
            if success:
                current_app.logger.info(f"每日跟进提醒任务执行成功: {message}")
            else:
                current_app.logger.error(f"每日跟进提醒任务执行失败: {message}")
        except Exception as e:
            current_app.logger.error(f"每日跟进提醒任务执行异常: {str(e)}")


def run_urgent_reminder_task(app):
    """
    执行紧急提醒任务
    检查是否有需要立即处理的跟进记录
    """
    with app.app_context():
        try:
            current_app.logger.info("开始执行紧急跟进提醒检查")
            # 这里可以添加更紧急的提醒逻辑，例如：
            # 1. 检查2小时内需要跟进的记录
            # 2. 检查刚刚创建的需要解决方案配合的记录
            
            # 当前简化处理，直接调用普通提醒
            success, message = send_followup_reminders()
            if success:
                current_app.logger.info(f"紧急跟进提醒任务执行成功: {message}")
            else:
                current_app.logger.error(f"紧急跟进提醒任务执行失败: {message}")
        except Exception as e:
            current_app.logger.error(f"紧急跟进提醒任务执行异常: {str(e)}")